package com.joinlabs.exception;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.multipart.MaxUploadSizeExceededException;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView;

/**
 * 
 * 我们自己定义的 全局异常 处理器
 * 
 * 
 * 
 * 一般的业务异常 直接 由相关的 Controller自行处理,进行界面的跳转
 * 
 * 异常直接由 核心控制器 抛出,那么就交给 全局的异常处理器，进行判断并处理 (打印异常日志,界面的跳转)
 * 
 * 
 * 
 * 系统异常:
 * 
 * 
 * @author GL
 *
 */

public class CustomExceptionResolver implements HandlerExceptionResolver{

	/**
	 * 处理 从 核心控制器 交过来的异常
	 * 
	 * 最终还是 返回 界面
	 * 
	 */
	@Override
	public ModelAndView resolveException(HttpServletRequest request,
			HttpServletResponse response, Object handler, Exception ex) {
		
		//打印 异常的栈信息
		ex.printStackTrace();
		
		ModelAndView mv = new ModelAndView();
		
		//判断 到底是哪种异常
		
		if(ex instanceof MaxUploadSizeExceededException){
			//文件上传总大小异常
			mv.setViewName("/uploads");
			mv.addObject("sizemsg", "上传文件限制在10kb以内");
			mv.addObject("uploadmsg", "文件上传失败");
			return mv;
		}

		
		//上述没匹配的 ,交给 统一的错误界面 去处理
		mv.setViewName("redirect:/error/500");
		
		
		return mv;
	}

}
